import os
import subprocess
import sys
import platform
import shutil

def build_executable():
    """
    使用PyInstaller构建可执行文件
    """
    # 确保输出目录存在
    if not os.path.exists('dist'):
        os.makedirs('dist')
    
    # 根据操作系统设置图标
    icon_path = 'NONE'
    
    # PyInstaller命令
    pyinstaller_cmd = [
        'pyinstaller',
        '--onefile',  # 生成单个可执行文件
        '--noconsole',  # 不显示控制台窗口
        '--name', 'Excel合并工具',  # 可执行文件名称
        '--icon', icon_path,  # 图标
        '--add-data', 'README.md:.',  # 添加自述文件
        '--clean',  # 清理临时文件
        'excel_merger.py'  # 主脚本
    ]
    
    print("正在构建可执行文件...")
    
    # 运行PyInstaller命令
    result = subprocess.run(pyinstaller_cmd, capture_output=True, text=True)
    
    if result.returncode != 0:
        print("构建失败:")
        print(result.stderr)
        return False
    
    print("构建完成！可执行文件位于 dist 目录中")
    
    # 创建一个发布包，包含需要的文件
    create_release_package()
    
    return True

def create_release_package():
    """创建一个完整的发布包"""
    release_dir = 'release'
    
    # 创建发布目录
    if os.path.exists(release_dir):
        shutil.rmtree(release_dir)
    os.makedirs(release_dir)
    
    # 复制可执行文件到发布目录
    dist_dir = 'dist'
    if sys.platform == 'win32':
        exe_file = os.path.join(dist_dir, 'Excel合并工具.exe')
        if os.path.exists(exe_file):
            shutil.copy2(exe_file, release_dir)
    else:  # macOS/Linux
        exe_file = os.path.join(dist_dir, 'Excel合并工具')
        if os.path.exists(exe_file):
            shutil.copy2(exe_file, release_dir)
            # 确保可执行权限
            os.chmod(os.path.join(release_dir, 'Excel合并工具'), 0o755)
    
    # 复制README文件
    shutil.copy2('README.md', release_dir)
    
    # 复制启动脚本
    if os.path.exists('run_excel_merger.bat'):
        shutil.copy2('run_excel_merger.bat', release_dir)
    
    if os.path.exists('run_excel_merger.sh'):
        shutil.copy2('run_excel_merger.sh', release_dir)
        # 确保可执行权限
        os.chmod(os.path.join(release_dir, 'run_excel_merger.sh'), 0o755)
    
    # 创建示例数据文件夹
    example_dir = os.path.join(release_dir, 'example_data')
    os.makedirs(example_dir)
    
    # 创建一个简单的示例数据文件
    with open(os.path.join(example_dir, 'README.txt'), 'w', encoding='utf-8') as f:
        f.write("将Excel合并工具复制到包含Excel文件的文件夹中，然后双击运行即可。\n")
        f.write("合并后的文件将保存在自动创建的output文件夹中。\n")
    
    print(f"已创建发布包：{os.path.abspath(release_dir)}")

if __name__ == "__main__":
    build_executable() 